package com.zpark.mybatis_plus.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zpark.mybatis_plus.entity.Emp;
import com.zpark.mybatis_plus.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.Date;
import java.util.UUID;

/**
 * 测试增删改
 */
@SpringBootTest
public class UserMapperTestCUD {
    @Autowired
    private IUserMapper userMapper;
    @Autowired
    private IEmpMapper empMapper;



    @Test
    public void testInsert(){
        // 构造插入对象
        User user = new User();
        user.setAge(56);
        user.setBirthday(new Date());
        user.setUserName("大锤");
        user.setPassword("888888");
        user.setName("王大锤");
        user.setEmail("wangdachui@163.com");

        // 调用方法添加数据
        userMapper.insert(user);
    }

    @Test
    public void testInsert1(){
        /*
        手动设置主键值。
            1）mysql数据库主键为自增或不是自增都可以
            2）修改User对象：
         */
        // 构造插入对象
        User user = new User();
        user.setId(6L);
        user.setAge(56);
        user.setBirthday(new Date());
        user.setUserName("大锤");
        user.setPassword("888888");
        user.setName("王大锤");
        user.setEmail("wangdachui@163.com");

        // 调用方法添加数据
        userMapper.insert(user);
    }

    @Test
    public void testInsert2(){
        /*
            **3、UUID：**
​				生成全局唯一ID。
​				1）mysql数据库主键为字符串类型，不是自增类型。
​				2）修改User对象。
         */
        Emp emp = new Emp();
        emp.setUname("张无忌");

        // 调用插入方法
        empMapper.insert(emp);

    }

    @Test
    public void testUpdate1(){
        // 创建修改的对象
        User user = new User();
        // 设置需要被修改的属性值
        user.setId(1674599053943418882L);
        user.setName("dachui");
        user.setUserName("张大锤");
        user.setEmail("zdc@163.com");

        // 调用方法修改数据
        userMapper.updateById(user);

    }

    @Test
    public void testUpdate2(){
        // 创建修改的对象
        User user = new User();
        // 设置需要被修改的属性值
        user.setName("张三丰");
        user.setEmail("jhsdgfjsgdfjsdggfsdjfsdg@163.com");
        user.setPassword("0000000000");

        // 创建修改的条件对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("user_name", "大锤");
        wrapper.eq("password", "888888");

        // 调用方法执行修改
        userMapper.update(user, wrapper);


    }

    @Test
    public void testDelete1(){
        // 根据主键id删除数
        userMapper.deleteById(1674599053943418882L);
    }

    @Test
    public void testDelete2(){
        ArrayList<Long> list = new ArrayList<>();
        list.add(6L);
        list.add(1674599053943418881L);

        // 根据主键id批量删除数
        userMapper.deleteBatchIds(list);
    }

    @Test
    public void testDelete3(){
        // 构造删除的条件对象
        User user = new User();
        user.setName("王大锤");
        user.setPassword("888888");

        // 将实体对象进行包装，包装为操作条件
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        wrapper.eq("name", "孙七")
                .or()
                .eq("password", "888888");

        // 调用方法删除
        userMapper.delete(wrapper);

    }


}
